#博客编辑页面自动化测试

from selenium.webdriver.support import expected_conditions as EC
from time import sleep
from Scripts.selenium.common import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from BologAutoTest.Common.Utils import BlogDriver


#登录状态
#正常发布
class BlogUpdate:
    def __init__(self):
        self.url = "http://8.137.19.140:9090/blog_edit.html"
        self.driver = BlogDriver.driver
        self.driver.get(self.url)

    def BlogUpdateSu(self):
        # 点击写博客并截图
        self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(5)").click()

        self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("发布页面自动化功能测试")
        sleep(3)
        #截图--1
        BlogDriver.getScreeShot()
        #
        # #尝试定位到内容编辑去并修改内容
        # # 先找到元素（不管可见不可见）
        # content_el = self.driver.find_element(By.CSS_SELECTOR, "#content")
        # # 手动检查 display 状态
        # is_hidden = self.driver.execute_script(
        #     "return window.getComputedStyle(arguments[0]).display === 'none';", content_el
        # )
        # #   控制台报错： raise AssertionError(AssertionError: Element #content 被设置为 display:none，因此不可交互。)
        #由于运行面带会主动中断运行流程，所以将此段代码注释掉
        # if is_hidden:
        #     raise AssertionError(
        #         f"Element #content 被设置为 display:none，因此不可交互。"
        #     )
        # else:
        #     # 否则继续等待可点击
        #     try:
        #         content_box = WebDriverWait(self.driver, 10).until(
        #             EC.element_to_be_clickable(
        #                 (By.CSS_SELECTOR, "#content")
        #             )
        #         )
        #         print("页面加载完成，找到了内容编辑区")
        #         content_box.clear()
        #         content_box.send_keys("自动测试修改内容：7878")
        #         # 截图
        #         BlogDriver.getScreeShot()
        #         sleep(3)
        #     except TimeoutException as te:
        #         print("超时：页面未加载完成或未找到指定元素")
        #         使用 str(te) 获取完整错误信息
        #         print(f"详细信息：{str(te)}")
        #     except ElementNotInteractableException as e:
        #         使用 str(e) 获取完整错误信息
        #         print(f"元素不可交互：{str(e)}")
        #     except Exception as e:
        #         使用 str(e) 获取完整错误信息
        #         print(f"发生错误：{str(e)}")


        #尝试定位到菜单栏并点击功能
        try:
            WebDriverWait(self.driver,10).until(
                EC.presence_of_element_located(
                    (By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul")
                )
            )
            print("页面加载完成，找到了菜单栏")
            try:
                Cite = WebDriverWait(self.driver, 10).until(
                    EC.presence_of_element_located(
                        (By.CSS_SELECTOR, "#editor > div.editormd-toolbar > div > ul > li:nth-child(7) > a > i")
                    )
                )
                Cite.click()
                # 截图--2
                BlogDriver.getScreeShot()
                print("页面加载完成，找到并点击引用功能")
                # except TimeoutException as te,捕获 TimeoutException，如果在 10 秒内找不到元素，打印错误信息。
            except TimeoutException as te:
                print("超时：页面未加载完成或未找到指定元素")
                print(f"详细信息：{te}")
                # except Exception as e,捕获其他异常，打印详细信息。
            except Exception as e:
                print(f"发生错误：{e}")
            #except TimeoutException as te,捕获 TimeoutException，如果在 10 秒内找不到元素，打印错误信息。
        except TimeoutException as te:
            print("超时：页面未加载完成或未找到指定元素")
            print(f"详细信息：{te}")
            #except Exception as e,捕获其他异常，打印详细信息。
        except Exception as e:
            print(f"发生错误：{e}")


        self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
        sleep(3)

        # 发布文章后，会自动跳转到博客列表页，判断一下跳转后的url是否是博客列表页的url
        jumpURL = self.driver.current_url
        print(jumpURL)
        assert jumpURL == "http://8.137.19.140:9090/blog_list.html"

        sleep(2)
        # 截图--3
        BlogDriver.getScreeShot()

#未登录状态

    def UpdateNotLogin(self):
        # 点击注销并截图
        self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(6)").click()
        # 截图--1
        BlogDriver.getScreeShot()
        sleep(1)

        self.driver.get("http://8.137.19.140:9090/blog_edit.html")
        # 截图--2
        BlogDriver.getScreeShot()
        try:
            WebDriverWait(self.driver,10).until(
                EC.presence_of_element_located(
                    (By.CSS_SELECTOR,"#submit")
                )
            )
            print("页面加载完成，找到了指定元素")
        except TimeoutException:
            print("超时：页面未加载完成或未找到指定元素")